#ifndef __SmileStruct_h__
#define __SmileStruct_h__

/*****************************************************************************************************************************************************************/
/*****************************************************************************************************************************************************************/

class smileStruct {

    private:

        char *code;
        char *id;
        char **lingos;
        int   numberLingos;

    protected:

        void CopyLingo(char *, char*, int, int);
        int  CountFindLingos(char *);

    public:

        //Constructor and Destructor
        smileStruct();
        smileStruct(const char *, const char *);
        smileStruct(const smileStruct*);
        ~smileStruct();

        //Input Functions
        void Code(char *);
        void Id(char *);
        void Lingos(char **, int);
        void NumberLingos(int);

        //Output Functions
        char  *Code(void);
        char  *Id(void);
        int    Lingos(int, char **);
        int    NumberLingos(void);

        //Operations Funtions
        void 		InputLine(char *);
        int  		ObtainLingos(void);
        int  		ObtainLingosWithoutNumber(void);
        double		ComputeLingoSimilarity(smileStruct&); //Using the integral Tanimoto coefficient
        friend double	ComputeLingoSimilarity(smileStruct&, smileStruct&); //Using the integral Tanimoto coefficient
        friend double	ComputeLingoSimilarity(smileStruct*, smileStruct*); //Using the integral Tanimoto coefficient

        //Utilities functions
        smileStruct operator=(const smileStruct&);

        static void MixArrayX(char**, int, char**, int, char**);
        static void MixArrayX(int*, int, int*, int, int*);
        static void MixArrayX(float*, int, float*, int, float*);
        static void MixArray(char**, int);
        static void MixArray(int*, int);
        static void MixArray(float*, int);
        static void MergeSort(char **, int);
        static void MergeSort(int*, int);
        static void MergeSort(float*, int);
        static int  CompactList(char **&, int);
        static int  CompactList(int *&, int);

};

#endif

